
### 项目四 舵机控制

![image92](../media/ebfc39b179ba70727ddf81ce6817deb5.png)

**项目介绍：**

舵机是一种位置伺服的驱动器，主要是由外壳、电路板、无核心马达、齿轮与位置检测器所构成。其工作原理是由接收机或者单片机发出信号给舵机，其内部有一个基准电路，产生周期为20ms，宽度为1.5ms
的基准信号，将获得的直流偏置电压与电位器的电压比较，获得电压差输出。

![image93](../media/69be958142b773acdae33eeef12afed7.png)

舵机有很多规格，但所有的舵机都有外接三根线，分别用棕、红、橙三种颜色进行区分，由于舵机品牌不同，颜色也会有所差异，棕色为接地线，红色为电源正极线，橙色为信号线。

舵机的转动的角度是通过调节PWM（脉冲宽度调制）信号的占空比来实现的，标准PWM（脉冲宽度调制）信号的周期固定为20ms（50Hz），理论上脉宽分布应在1ms到2ms之间，但是，事实上脉宽可由0.5ms
到2.5ms之间，脉宽和舵机的转角0°～180°相对应。

![image94](../media/5f3471aed2a4350556b9f7cd0b3284c5.png)

对应的舵机角度值如下:

![image95](../media/ebadad234cf7e43ee799e66bb6c67b27.png)

**舵机参数：**

工作电压：DC 4.8V〜6V

可操作角度范围：大约 About 180°(在 500→2500 μsec)

脉波宽度范围：500→2500 μsec

空载转速：0.12±0.01 sec/60（DC 4.8V） 0.1±0.01 sec/60（DC 6V）

空载电流：200±20mA（DC 4.8V） 220±20mA（DC 6V）

停止扭力：1.3±0.01kg·cm（DC 4.8V） 1.5±0.1kg·cm（DC 6V）

停止电流：≦850mA（DC 4.8V） ≦1000mA（DC 6V）

待机电流：3±1mA（DC 4.8V） 4±1mA（DC 6V）

**项目组件：**

| UNO R3 开发板\*1                                       | L298P 电机驱动扩展板 V1\*1                              | SG90 9G舵机\*1                                         |
|--------------------------------------------------------|---------------------------------------------------------|--------------------------------------------------------|
| ![image96](../media/67417bd98f12bffd0352f76063e5abbd.png) | ![image97](../media/3dca1bdd1d1420c1d12b16cbf52fee00.png)  | ![image98](../media/2afd42eb9da6d4a1efa4755458ab2a42.png) |
| USB线\*1                                               | 18650双节电池盒 (18650电池*2(电池自配))*1               |                                                        |
| ![image99](../media/2adb48888136bedc4d6b37d47a47b292.jpg) | ![image100](../media/c5bf59a8e5cdded95c02334369ab6fdd.png) |                                                        |

**接线图**：

**⚠️特别注意：坦克智能车已经组装好了，这里不需要把传感器模块和其他的都拆下来又重新组装和接线，这里再次提供接线图，是为了方便您编写代码！**

![image101](../media/ac4131d8e8f6b1e87d34cce8d3571cb3.png)

**接线注意**：舵机连接到G（GND）、V（VCC）、D10，舵机的棕色线是与Gnd(G)相连，红色线与5v(V)相连，橙色线是与数字10相连的。接舵机的时候必须要外接供电，因为驱动舵机的电流要求比较大，一般峰值的情况下接近1A，开发板的电流远远不够。如果不接外接电源，很有可能烧坏开发板。

**项目代码：**

**认识代码块**

① 这个代码块，表示当启动ESP32这块开发板时，将运行代码。

![image102](../media/img-20250609173755.png)

② 创建变量。

![image103](../media/img-20250609174611.png)

这是创建“变量”的指令方块，可以声明“全局”或“局部”，还可以设置变量的类型、名称和赋值，item是变量名称。

![image104](../media/img-20250609174658.png)

获取变量item。

![image105](../media/img-20250609174714.png)

设置变量的值

![image106](../media/img-20250609174817.png)

设置变量item模式为每执行一次循环让item加1或每执行一次循环让item减1。

![image107](../media/img-20250609174841.png)

③ 循环语句，顾名思义就是重复做一件事。

![image108](../media/img-20250609173827.png)

④
有条件的循环控制语句，当满足循环次数时就退出循环，比如：10表示循环执行10次，数字10是可以改成其他数字的。

![image109](../media/img-20250609174945.png)

⑤
向舵机指定引脚设置输出角度代码块，需要设置对应的引脚、角度和延时，就可以输出对应的角度。

![image110](../media/img-20250610082638.png)

⑥ 将程序的执行暂停一段时间，也就是延时。单位是秒。

![image111](../media/img-20250609174003.png)

**组合代码块**

（**特别提醒：在上传程序代码前，需要把蓝牙模块取下，否则代码会上传失败。需要上传代码成功后，再连接蓝牙模块。**）

![image112](../media/img-20250610082515.png)

**项目结果：**

上传代码成功，上电后，舵机也是在0°到180°角度范围来回摆动。